Date : 10 d�cembre 1991
Protection : MOT DE PASSE
Programme : FACE to FACE
Outils : SOFT-ICE V2.50
Fichier : FTF_VGA.EXE
Temps pass� : 20 MINUTES
Soci�t� : SOFTWORLD
Divers :
Origine : INDONESIE
Num�ro : 156
Un fichier "trafiqu�". Probablement d'origine compact� par LZEXE
comme le fichier FTF_MONO.EXE qui lui se d�compacte correctement.
Ils ont trouv� "mon" astuce qui consiste � modifier les 4 lettres
de LZ91 dans l'ent�te du fichier ( ce qui le rend ind�comprimable ).
En fait pour �tre exact, chronologiquement c'est moi qui ai fini par
trouver cette astuce bien apr�s en fouinant dans le header des fichier
LZEXEt�s. Malheureusement ils sont all�s plus loin que moi en �crasant
des informations vitales pour emp�cher le programme UNLZEXE de
fonctionner. Voir ci-dessous:
ftf_vga.exe
SECTEUR : 000
DEC HEX
000 000 4D 5A FF 01 8C 00 00 00 07 00 64 14 FF FF 41 11 MZ�� d��A
016 010 00 04 00 00 8C 05 01 11 50 00 00 00 00 00 00 00 �P
032 020 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0D ###############.
048 030 23 28 43 29 20 53 4F 46 54 57 4F 52 4C 44 23 0D #(C) SOFTWORLD#.
064 040 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 00 ###############
La protection elle-m�me est facile � contourner, il suffit de NOPer
deux positions pour passer le code:
CS=1BB5
CS:3338 3B46F4 CMP AX,[BP-0C]
CS:333B 7503 JNZ 3340 ; NOP NOP ( 9090 )
CS:333D E92101 JMP 3461
CS:3340 BED007 MOV SI,07D0
Ci dessous FTF.COM qui fait le travail dans un fichier compact� comme
d'habitude avec quelques am�liorations de cryptage ( voir le fichier
UTILXOR.C ):
; PATCH POUR LE PROGRAMME FACE to FACE
; DETOURNEMENT DE L'INT 21 SOUS-FONCTION 2C
;
;******************************************************************************
; ZONE A INITIALISER
adr_ip1 equ 333Bh ; adresse dont le contenu est � modifier.
anc_val equ 0375h ; Valeur d'origine � rechercher.
nouv_val equ 9090h ; Nouvelle valeur.
INT_DET equ 21h ; Le num�ro de l'INT que l'on veut utiliser.
sous_fonction equ 2Ch ; Sous-fonction utilis�e.
;******************************************************************************
; Zone commune
; non list�e car identique � tous mes patchs.
;------------------------------ PROGRAMME PERE ------------------------------
; non list�e m�me raison.
;----------------------------- int d�tourn�e --------------------------------
int_entry proc far
_int: pushf
push ds
push cx
push bx
push ax
cmp ah,sous_fonction ; Sous - fonction de l'INT.
jne loc_2 ; Jump if not equal
mov cx,20
mov ax,sp
incr: pop ds
dec cx
cmp cx,0
je s
cmp word ptr ds:[adr_ip1],anc_val ; Si ok on patche.
jnz incr
mov word ptr ds:[adr_ip1],nouv_val ; On y place le patch.
xor bx,bx
mov ds,bx
; L'INT 21 n'est pas r�entrante, on ne peut donc pas se servir de
; la fonction 25h ( set int. vector )
mov bx,word ptr cs:data_9 ; Je remets manuellement
mov ds:[INT_DET*4],bx ; en place le vecteur
mov bx,word ptr cs:data_9+2 ; de l'INT d�tourn�e.
mov ds:[INT_DET*4+2],bx
s: mov sp,ax
loc_2: pop ax
pop bx
pop cx
pop ds
popf
jmp dword ptr cs:data_9
int_entry endp
;------------ REDUCTION DE LA PLACE OCCUPEE PAR LE PROGRAMME COM ------------
; non list�e car idem.
;----------------------- PLACE RESERVEE POUR LA PILE ------------------------
; non list�e.
FREDDY
|